import axios from "axios";
// import { useNavigate } from "react-router-dom";
// const navigate = useNavigate();
const instance = axios.create({
    // 默认请求地址
    baseURL: "http://127.0.0.1:3000",
})

// 请求拦截器
instance.interceptors.request.use(function (config) {
    //获取长token
    const accessToken = localStorage.getItem("accessToken");
    if (accessToken) {// 判断是否存在token，如果存在的话，则每个http header都加上token
        config.headers.Authorization = "Bearer " + accessToken;
    }
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

async function refreshToken() {
    //刷新token
    const res = await instance.get("/refresh", {
        params: {
            token: localStorage.getItem("refreshToken"),
        },
    });
    if (res.status == 200) {
        localStorage.setItem("accessToken", res.data.accessToken);//更新长token
        localStorage.setItem("refreshToken", res.data.refreshToken);//更新短token
    }
    return res;
}
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
}, async function (error) {
    let { status, data, config } = error.response;
    if (status === 400 && !config.url.includes("/refresh")) {
        const res = await refreshToken(); // 刷新Token
        if (res.status === 200) {
            return instance(config); // 重发请求
        } else {
            alert(data.msg || "登录过期，请重新登录");
            window.location.href = '/login';
            return {};
        }
    } else {
        return error.response;
    }
});


export default instance;